#  第三周 第1节作业
# 1、用for循环和while循环完成简单的计数
# 2、用for循环和while循环两种方式来实现斐波那契函数，限制在100以内
# - 斐波那契函数
# 第N项是N - 1，N - 2的和
# F(n) = F(n - 1) + F(n - 2)
# [0, 1, 1, 2, 3, 5, 8, 13, 21....]
# 在第二周 - 第一节课我们实现的简单计算器的基础上, 对参数进行检查, 如果报错就抛出我们自定义异常ParamsError

# 用for 循环完成简单计数
count = 0
for i in range(10, 100, 6):
    if count <= 15:
        count += 1
    print(f"第 {count} 个数为：", i)

print("-----------分割线-----------")

for i, e in enumerate(range(20, 100, 5)):
    print(f"索引：{i}, 值：{e}")

# 用 while 循环完成简单计数
count = 1
while count < 9:
    print(f"这是第 {count} 次打印本行")
    count += 1

print("-----------分割线-----------")
# 用for循环来实现斐波那契函数，限制在100以内
f1 = 0
f2 = 1
fn = 1
list1 = []

for i in range(20):
    fn = f2 + f1
    f1 = f2
    f2 = fn
    if i == 0:
        list1.append(0)
    if i == 1:
        list1.append(1)
    if i == 2:
        list1.append(fn)
    else:
        list1.append(fn)
print(list1)

print("-----------分割线-----------")
# 用while循环两种方式，限制在100以内
w0 = 0
w1 = 1
wn = 1
list2 = []
n = 0
m = 20
while True:
    wn = w0 + w1
    w0 = w1
    w1 = wn
    if n == 0:
        list2.append(0)
    if n == 1:
        list2.append(1)
    else:
        list2.append(wn)
    if n == m:
        break
    print(wn)
    n += 1

print("-----------分割线-----------")


# 在第二周-第一节课我们实现的简单计算器的基础上, 对参数进行检查, 如果报错就抛出我们自定义异常ParamsError

# 求和
def add(a, b):
    return a + b


# 求差
def minus(a, b):
    return a - b


# 求积
def multiply(a, b):
    return a * b


class ParamsError(Exception):
    pass


# 求商
def divide(a, b):
    try:
        return a / b
    except ZeroDivisionError:
        raise ParamsError("分母不可以为0")
    finally:
        print("function my_sub end")


# 整除

def divisi(a, b):
    try:
        return a // b
    except ZeroDivisionError:
        raise ParamsError("分母不可以为0")
    finally:
        print("function my_sub end")


# 取余
def rem(a, b):
    return a % b


# 次幂
def pow(a, b):
    return a ** b


# 求根
def root(a, b):
    return a ** (1 / b)


print('256+4等于：', add(256, 4))
print('256-4等于：', minus(256, 4))
print('256*4等于：', multiply(256, 4))
print('256/0等于：', divide(256, 0))
print('256整除0等于：', divisi(256, 0))
print('256/4余数为：', rem(256, 4))
print('256的4次幂等于：', pow(256, 4))
print('256开4次方根为：', root(256, 4))
